package com.spring.nio.service.file.model.structure;

import com.spring.nio.core.channel.context.SocketChannelContext;
import lombok.Data;

import java.io.File;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;
import java.util.Date;

/**
 * @author: spring
 * @date: 2021-04-28 17:08
 * @pacage_name: com.spring.nio.service.file.model
 * @class_name: FileTransportTaskDTO
 * @description: 文件上传或是下载或是在线传输三类任务结构化数据
 *
 *  1、文件上传任务
 *      客户端上传文件大小(Long型数据)，每次上传字节数大小由客户端决定
 *  2、文件下载任务
 *      服务端读取待下载文件大小(Long型数据)，服务端根据文件数据大小决定向客户端发送的大小
 *
 */
@Data
public class FileTransportTaskDTO {

    /**
     * 文件在线传输时的用户Id
     * */
    private Long userId;

    /**
     * 文件在线传输时的用户Id
     * */
    private String userName;

    /**
     * 文件唯一识别码
     * */
    private String fileTag;

    /**
     * 文件对象
     * */
    private File file;

    /**
     * 文件长度
     * */
    private Long fileLength;

    /**
     * 文件通道
     * */
    private FileChannel fileChannel;

    /**
     * socket通道
     * */
    private SocketChannelContext socketChannelContext;

    /**
     * 统计文件实时流发送序号
     * */
    private int packetIndex;

    /**
     * 统计文件实时流已发送字节数
     * */
    private Long sumSendBytes;

    /**
     * 当前任务所属用户剩余文件任务数
     * */
    private int restTaskCount;

    /**
     * 当前任务文件通道是否关闭成功(取消时)
     * */
    private Boolean isFileChannelClose;

    /**
     * 当前任务文件是否删除成功(取消时)
     * */
    private Boolean isFileDelete;

    /**
     * 创建时间
     * */
    private Date createDate;

    /**
     * 连接状态
     * */
    private String connectStatus;

    /**
     * 任务状态
     * */
    private String taskStatus;

    /**
     * 记录任务执行过程中的信息,执行情况
     * */
    private String remark;
}
